import event.impl.CommonMessage;
import observer.ComponentListener;
import observer.impl.KeyBoardListener;
import observer.impl.ScreenListener;
import observer.impl.SpeakerListener;
import subject.ZhhMessageBus;

import java.util.Scanner;

/**
 * 观察者模式：主要角色有两个
 * 被观察方：被观察方发生变化的时候，会主动通知当前所有的观察方，代码形式就是调用所有观察方的统一API，也可以说是观察方的回调
 * 观察方：提供一个回调方法，用于被观察方在发生变动并需要通知观察方的时候调用
 */
public class Main {
    public static void main(String[] args) {
        // 消息总线
        ZhhMessageBus bus = new ZhhMessageBus();
        // 添加观察者
        bus.addListener(new ScreenListener());
        bus.addListener(new SpeakerListener());
        bus.addListener(new KeyBoardListener());
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String next = sc.next();
            // 发送消息
            bus.sendMessage(new CommonMessage(String.format("%s", next)));
        }
    }
}